/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.common.util.mvc.config;

import java.io.InputStream;
import java.util.List;

import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

/**
 * mvc配置文件读取者,包含所有子类的公共api
 * author: amon_lei created in ：2005-4-6 22:03
 */

public abstract class ConfigReader
{
        static Logger logger = Logger.getLogger(ConfigReader.class);        
        
        private Element root;
        
        public Element init(String configFileName)
          throws XmlFormatException
        {
                InputStream fi = null;
                try
                {
                        logger.debug("帮定" + configFileName + ".xml");
                        fi = this.getClass().getClassLoader().getResourceAsStream("mvc/" + configFileName + ".xml");
                        SAXBuilder sb = new SAXBuilder();
                        sb.setValidation(true);
                        Document doc = sb.build(fi);
                        this.root = doc.getRootElement(); //得到根元素InputStream fi = null;
                        return root;
                }
                catch(Exception e)
                {
                        throw new XmlFormatException("解析" +  configFileName + ".xml 异常" + e.toString());
                }
                finally
                {
                        try
                        {
                                fi.close();
                        }
                        catch(Exception e)
                        {
                                logger.error("关闭InputStream异常:" + e.toString());
                        }       
                }
                
        }        
        
        public Element getModuleEle(String moduleId)
          throws NoSuchElementException
                 
        {
                Element moduleEle = this.root.getChild("module");
                if(moduleEle == null)
                {
                        throw new NoSuchElementException("标签<module>不存在");                        
                }
                if(moduleEle.getAttributeValue("id").equals(moduleId))
                {
                        return moduleEle;
                }
                else
                {
                        throw new NoSuchElementException("查找<module id = '" + moduleId + "'>失败");
                }         
        }
        
        /**
         * 从elements里面获取某个元素
         */
        public Element getElementByAttribute(List eles,
                                             String attriKey,
                                             String attriValue)                    
        {
                for(int i = 0; i < eles.size(); i ++)
                {
                        Element ele = (Element)eles.get(i);       
                        logger.debug(i + " " + attriKey + " = " + ele.getAttributeValue(attriKey)); 
                        if(ele.getAttributeValue(attriKey).equals(attriValue))
                        {
                                return ele;                
                        }
                }
                return null;
        }                                 
}        

